package jee.boot.common.utils.excel.excel;

import jee.boot.common.utils.DateUtils;
import jee.boot.common.utils.excel.service.DictionaryTranslateHelper;
import jee.boot.common.utils.excel.service.EntityTranslateHelper;

import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * Excel 模板导出功能函数
 *
 * @author zhilei.wang
 */
public class Function {
    private Map<String, Integer> sequence = new HashMap<>();
    private DictionaryTranslateHelper dictionaryTranslateHelper;
    private EntityTranslateHelper entityTranslateHelper;

    public Function() {
        dictionaryTranslateHelper = DictionaryTranslateHelper.getInstance();
        entityTranslateHelper = EntityTranslateHelper.getInstance();
    }

    public Function(DictionaryTranslateHelper dictionaryTranslateHelper, EntityTranslateHelper entityTranslateHelper) {
        this.dictionaryTranslateHelper = dictionaryTranslateHelper;
        this.entityTranslateHelper = entityTranslateHelper;
    }

    public String dics(String type, String value) {
        return dictionaryTranslateHelper.getDictLabels(value, type);
    }

    /**
     * 字典翻译(多个字典，逗号隔开的)
     *
     * @param type  字典类型
     * @param value 默认值
     * @return 对应的字典Label
     */
    public String dics(String type, String value, String field) {
        return dictionaryTranslateHelper.getDictLabels(value, type, field);
    }

    /**
     * 字典翻译
     *
     * @param type  字典类型
     * @param value 字典值
     * @return 对应的字典Label
     */
    public String dic(String type, String value) {
        return dictionaryTranslateHelper.getDictLabel(value, type);
    }

    /**
     * 字典翻译
     *
     * @param type  字典类型
     * @param value 字典值
     * @return 对应的字典Label
     */
    public String dic(String type, String value, String field) {
        return dictionaryTranslateHelper.getDictLabel(value, type, field);
    }

    /**
     * 主数据翻译
     *
     * @param fieldType      字段类型,比如jee.boot.entity.SysOffice等
     * @param val            excel中填写的值,比如 "普华永道"
     * @param attrName       属性名称,比如company.name
     * @param returnAttrName 属性名称,比如company.code
     * @return 返回对象的returnAttrName属性 ,比如 pwc
     */
    public Object entityFieldValue(String fieldType, String val, String attrName, String returnAttrName) {
        return entityTranslateHelper.entityFieldValue(fieldType, val, attrName, returnAttrName);
    }

    /**
     * 获取自增序列
     *
     * @param key 序列的key值
     * @return
     */
    public Integer sequence(String key) {
        Integer integer = sequence.get(key);
        if (integer == null) {
            integer = 0;
        }
        integer += 1;
        sequence.put(key, integer);
        return integer;
    }

    /**
     * 格式化日期
     *
     * @param date   日期
     * @param format 格式
     * @return
     */
    public String dateFormat(Date date, String format) {
        if (date == null) {
            return "";
        }
        return DateUtils.formatDate(date, format);
    }

    /**
     * 格式化数字
     *
     * @param value  数字
     * @param format 格式
     * @return
     */
    public String format(Object value, String format) {
        if (value == null) {
            return "";
        }
        return new DecimalFormat(format).format(value);
    }
}
